const db = wx.cloud.database();

wx.cloud.init();

// 通过条件查询数据
const filterData = function(tableName,where={}){
  return db.collection(tableName).where(where).get()
}

// 获取数据数量
const getDataCount = function(tableName,where={}){
  return db.collection(tableName).where(where).count()
}

// 添加一条数据
const addData = function(tableName,data){
  return db.collection(tableName).add({
    data
  })
}

// 获取集合中全部数据
const getAllData = async function(tableName,where={}){
  const MAX_LIMIT = 20; // 每次可取的最大条数
  var resultCount = await db.collection(tableName).count();  // 获取数量
  var total = resultCount.total;
  // 计算需要循环的次数
  const batchTimes = Math.ceil(total / MAX_LIMIT);
  var tasks = [];  // 用于存储所有的promise对象
  for(let i = 0; i < batchTimes; i++){
    // 将分段查询的promise保存至tasks中
    tasks.push(db.collection(tableName).skip(i * MAX_LIMIT).limit(MAX_LIMIT).where(where).get());
  }
  var findList = await Promise.all(tasks);
  if(findList.length == 0){
    return []
  }else{
    return (await Promise.all(tasks)).reduce((acc, cur) => {
      return acc.data.concat(cur.data)
    })
  }
}

// 通过id删除数据
const delById = async function(tableName,id){
  return db.collection(tableName).doc(id).remove()
}

// 通过id修改数据
const updateById = async function(tableName,id,data){
  return db.collection(tableName).doc(id).update({
    data:data
  })
}

// 获取复合条件查询数据
const getLimitData = function({tableName,skip,limit,where={},sort={}}){
  if(JSON.stringify(sort) == '{}'){
    return db.collection(tableName).where(where).skip(skip).limit(limit).get()
  }else{
    return db.collection(tableName).where(where).skip(skip).limit(limit).orderBy(sort.name,sort.order).get()
  }
  
}

// 根据id获取数据
// const getDataById = function(tableName,_id){
//   return db.collection(tableName)
// }
export default {
  filterData,
  addData,
  getAllData,
  delById,
  updateById,
  getLimitData,
  getDataCount,
  db
}